<?php
namespace Home\Controller;
class AppointmentOrderController extends ComController{
	//订单列表页
	public function index(){
		$this->display();
	}
	
	
	//生成订单
	public function add(){
		$date_id = I('get.date_id','','intval');
		$prefix = C('DB_PREFIX');
		if(!empty($date_id)){
			//根据接收到的信息查找 教练，时间段等信息
			$app_date = M('appointment_date');
			$date_info = $app_date
			->alias('d')
			->join("{$prefix}appointment_time as t on d.app_time_id=t.id")
			->field('d.*,t.time as s_time,t.price')
			->where("d.id =$date_id")
			->find();
			if(!empty($date_info)){
// 				取$date_info中的app_co_id 查询教练信息
				$app_co_id = $date_info['app_co_id'];
				
				$app_coach = M('appointment_coach');
				$coach_info = $app_coach
				->alias('c')
				->join("{$prefix}license_type as t on c.li_type=t.id")
				->join("{$prefix}site as s on c.site_id=s.id")
				->join("{$prefix}car as ca on c.car_id=ca.id")
				->join("{$prefix}coach as co on c.coach_id=co.id ")
				->where("c.id=$app_co_id")
				->field('c.*,t.type,s.site,ca.car_num,co.img,co.id as coach_id')
				->find();//教练员的基本信息
				$this->assign('date',$date_info);
				$this->assign('coach',$coach_info);
				$this->display();
			}else{
				//未查到时间信息
			}
		}else{
			//参数错误
		}

	}
	//提交订单
	public function order(){
		//将接收到的数据写入到meeting_car_record 表中
		//缺少判断
		$date = $_POST;
		$date['user_id']=$_SESSION['user']['id'];
		$date['date_id']= $_POST['id'];
		unset($date['id']);
		$date['add_time']=time();
		//支付类型  线上
		$date['pay_type']=1;
		
		$app_date_id = $_POST['id'];
		$app_date = M('appointment_date');
		$car_record = M('meeting_car_record');
		
		//查询app_date 表中对应数据的状态是否为1（正常），其他状态均不允许提交订单
		$app_date_ver = $app_date->where("id = $app_date_id")->find();
		if(!empty($app_date_ver)){
			if($app_date_ver['status'] ==1){
				//不做处理
			}else{
				//该时间段不予许被选
				$this->notice(U('Appointment/index'),'该时间段已被预订，请重选');
			}
		}else{
			//未查到记录，让用户重新选择时间段
			$this->notice(U('Appointment/index'),'未查询到此条记录，请重选');
		}
		//查询app_date 表中对应数据的状态是否为1（正常），结束
		
		//订单的生成以及appointment_date状态的改变
		
		$res = $car_record->data($date)->add();
		if($res == false){
			//生成订单失败（未写入meeting_car_record表中）
			$this->notice('','订单生成失败，请重新操作');
		}else{
			//生成的订单表的id值
			$record_id = $res;
			
			//更新 appointment_date 中的status 为3（已加订单），同时写入 订单表的id值
			$arr= array('status'=>3,'record_id'=>$record_id,'update_time'=>time());
			$result = $app_date->where("id=$app_date_id")->data($arr)->save();
			
			if($result == false){
				//状态更新失败
				$car_record->where("id=$record_id")->delete();
				$this->notice('','订单生成失败，请重新操作');
			}else{
				//调用支付接口
				
				
				//支付成功后，更改appointment_date 表中的状态(status)为4（已支付），并更改meeting_car_record表中的ispay置为1（已支付）
				
				//更改meeting_car_record表中的ispay置为1（已支付），并将支付成功后返回的数据写入meeting_car_record 表中
				$record_arr = array('status'=>1,'update_time'=>time(),'ispay'=>1);
				$record_res = $car_record->where("id=$record_id")->data($record_arr)->save();
				
				if($record_res !==false){
					$app_arr = array('status'=>4,'update_time'=>time());
					$app_res = $app_date->where("id=$app_date_id")->data($app_arr)->save();
					
					//$this->success('订单成功',U('MeetingCarRecord/index'));
					$this->notice(U('MeetingCarRecord/index'),'预约成功');
				}else{
					//meeting_car_record表中的ispay置为1失败，将meeting_car_record ID 弹出，并将银行返回的数据弹出，显示给用户，让用户联系驾校或银行
						/* 未完成 */		
				}

			}
		}

	}
	//取消订单
	public function cancelOrder() {
		//需传参，meeting_car_record表中的id值
		$car_reord_id = I('get.record_id','','intval');
		//$car_reord_id = 2;
		
		$app_date = M('appointment_date');
		$car_record = M('meeting_car_record');
		
		if(empty($car_reord_id)){
			//传参错误
			$this->notice('','参数错误，请重新操作');
		}else{
			//取session 判断是否有权限操作本条数据
			$u_id = $_SESSION['user']['id'];
			if(empty($u_id)){
				//用户未登陆
			}else{
				$car_record_re = $car_record->where("id=$car_reord_id and user_id =$u_id")->find();
				if(!empty($car_record_re)){
					//查看预订时间段是否可以退款（当订购时间段和当前时间进行对比）
					
					
					
					//查看ispay的状态，如果未支付，直接将表中状态更改，如果已支付调用银行退款接口
					$ispay = $car_record_re['ispay'];
					
					if($ispay == 1){
						//已支付，需调用银行的退款的接口，判断返回的状态值，如果成功，则进行下一步，否则提示失败
						$this->notice('','需调用银行的退款接口');
					}
					
					//将数据库中 meeting_car_record表 及 appointment_date 表中的状态改变
					//先将meeting_car_record 表中的状态status置为3（已取消）
					$car_status = $car_record->where("id = $car_reord_id")->save(array('status'=>3,'update_time'=>time()));
					if($car_status ===false){
						//状态更新失败，将银行返回值，及meeting_car_record id值 返回给客户，让客户联系驾校
						//meeting_car_record id值 即为传递过来的 $car_reord_id
						/* 未完成  */
						
					}else{
						// meeting_car_record 状态更新成功，
						//取出数组中的date_id 重置appointment_date表的status状态值为1，并将record_id 置为0(默认值)
						$date_id = $car_record_re['date_id'];
						$data = array('status'=>1,'record_id'=>0,'update_time'=>time());
						$app_date_re = $app_date->where("id = $date_id")->save($data);
						//如果状态更新失败
						if($app_date_re ===false){
							$app_date->where("id = $date_id")->save($data);
						}
						
						//通知用户，退款成功，退款金额在**天内退还至原账号，如未退款请联系银行，
						$this->notice('','退款成功，退款金额将会在3-5个工作日内退还至原账号');
					}

				}else{
					//未查到记录，传参错误
					$this->notice('','传参参数，请重新操作');
				}
			}
			
		}

	}
	
	
	//调用银行支付接口
	
	
	/* 前台通知 */
	
	public function notice($url='',$msg=''){

		if(!empty($msg)){
			$data['msg']=$msg;
		}
		if(empty($url)){
			$data['url'] = $_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:"javascript:window.history.go(-1)";
		}else{
			$data['url']=$url;
		}
		$this->assign('data',$data);
		$this->display("Public:notice");

	}
	
}